#include "dialog.h"
#include "ui_dialog.h"
#include<QDebug>
Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
    resize(600,500);
    setWindowTitle("QDir类结合控件综合应用测试");
    edit=new QLineEdit("/");
    listwidget=new QListWidget;
    layout=new QVBoxLayout(this);
    layout->addWidget(edit);
    layout->addWidget(listwidget);
    connect(edit,&QLineEdit::returnPressed,this,[this]()
    {
        QDir dir(edit->text());
        dispdir(dir);
    });
    connect(listwidget,&QListWidget::doubleClicked,this,[this]()

    {
        dispdirshow(listwidget->currentItem());
    }
            );



    setLayout(layout);
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::dispfileinfolist(QFileInfoList list)
{
    listwidget->clear();
    for(int i=0;i<list.count();i++)
    {  QFileInfo tempfile=list[i];
        if(tempfile.isDir())
        {
            QIcon ico("://dir.jpg");
            QString filename=tempfile.fileName();
            QListWidgetItem *temp=new QListWidgetItem(ico,filename);
            listwidget->addItem(temp);
        }
        else if(tempfile.isFile())
        {
            QIcon ico("://file.jpg");
            QString filename=tempfile.fileName();
            QListWidgetItem *temp=new QListWidgetItem(ico,filename);
            listwidget->addItem(temp);
        }

    }

}

void Dialog::dispdirshow(QListWidgetItem *item)
{   /*QDir d;
    if(edit->text()!="/")
   {edit->setText(edit->text()+"/"+item->text());
       d.setPath(edit->text());
    }
    else
     {
        edit->setText(edit->text()+item->text());
           d.setPath(edit->text());
    }*/
//    if(!item) return;//安全检查
//    QString currentPath=edit->text();//获取当前路径
//    QString itemName=item->text();//获取文件名称
//    QDir currentDir(currentPath);//获取当前路径的dir对象
//    QString newPath=currentDir.absoluteFilePath(itemName);//添加新的路径在后面
//    // 检查新路径是否是有效目录
//      QDir newDir(newPath);
//      if (newDir.exists() && QFileInfo(newPath).isDir()) {
//          edit->setText(newDir.absolutePath());
//          dispdir(newDir);
//      } else {
//          // 处理文件点击或无效路径
//          qDebug() << "不是有效目录:" << newPath;
//          // 可以在这里添加打开文件的逻辑或显示错误消息
//      }
     QDir dir;
     QString str=item->text();
     dir.setPath(edit->text());
     dir.cd(str);
     edit->setText(dir.absolutePath());//absolutePath() 总是返回绝对路径

     dispdir(dir);



}

void Dialog::dispdir(QDir dir)
{
    QStringList strlist;
    strlist<<"*";//这个"*",文件过滤器，标识匹配所有文件
    QFileInfoList filelist=dir.entryInfoList(strlist,QDir::AllEntries,QDir::DirsFirst);
     //*表示匹配所有文件，allentries表示返回所有条目（文件、目录、符号链接），DirsFirst表示目录排前面
dispfileinfolist(filelist);

}

